降维后进行可视化
大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~
就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~
这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!
豆豆发送于19.9.27
来自Bioconductor放出的单细胞数据分析教程
https://bioconductor.org/packages/release/workflows/vignettes/simpleSingleCell/inst/doc/reads.html
1 利用PCA
对前三个主成分进行两两比较,看看细胞之间的联系
具有相似表达谱的细胞距离会更近(可以理解成每个细胞中都是一万多基因表达,这些基因有的表达高有的表达少,这种高低交错的形态就是表达谱。如果两个细胞都有相似的这种高低交错形态,那么它们可能就具有相似的基因表达特性,于是更有可能是同一类细胞。PCA就是衡量每个细胞中这一万多个基因的表达特性,来对这些细胞进行”种群划分“)
首先根据细胞生物学分类(control和treat)画PCA
plotReducedDim(sce, use_dimred="PCA", ncomponents=3,
colour_by="Oncogene") + fontsize
图中可以看到,PC1+PC2的效果是最好的(左侧中部图)
然后根据plate信息画PCA
目的是看看之前的去除批次做的效果如何,如果结果还是和上图一样能分开,那么就表示plate差异依然很大,足够撼动真实的生物学差异
plotReducedDim(sce, use_dimred="PCA", ncomponents=3,
colour_by="Plate") + fontsize
还是看最具代表性的PC1+PC2:不同plate的细胞分不开,说明之前removeBatchEffect()
是成功的
注意:
plotReducedDim()
会使用之前利用denoisePCA()
得到的结果,而且可以一次画多个主成分两两比较,视觉效果更直观。
作者建议
每个作图函数,都能根据细胞类型去调整点的颜色和大小,一般会设置:
size_by=
和shape_by=
虽然还有许多主成分,但它们包含的信息量远不如前几个主成分
2 利用tSNE
另一个常用的降维算法就是t-stochastic neighbour embedding (t-SNE),是基于在邻域图上随机游走的概率分布。它比PCA的强大之处在于,如果细胞群体很多,tSNE依然可以很好地将细胞按一定规则区分。这是因为tSNE能在高维空间中直接捕获细胞非线性关系,而PCA必须在线性的坐标轴上去展示它们。不过tSNE的计算量会更大,而且参数设置更复杂,一方面针对tSNE每次映射的坐标都不同,要设置随机种子,方便别人重复;另一方面需要设置perplexity
参数,它会影响最后显示的细胞分类情况,perplexity
的含义是:the number of close neighbors each point has
下面会利用PCA降维结果继续使用多个perplexity
值进行tSNE可视化
set.seed(100)
out5 <- plotTSNE(sce, run_args=list(use_dimred="PCA", perplexity=5),
colour_by="Oncogene") + fontsize + ggtitle("Perplexity = 5")
set.seed(100)
out10 <- plotTSNE(sce, run_args=list(use_dimred="PCA", perplexity=10),
colour_by="Oncogene") + fontsize + ggtitle("Perplexity = 10")
set.seed(100)
out20 <- plotTSNE(sce, run_args=list(use_dimred="PCA", perplexity=20),
colour_by="Oncogene") + fontsize + ggtitle("Perplexity = 20")
multiplot(out5, out10, out20, cols=3)
因为tSNE是一个随机的算法,所以我们要多试验几遍,确保结果具有代表性(相当于多做几次实验重复,增加可靠性);最终的脚本要使用set.seed()
保证可重复性;不同的perplexity
会影响细胞在低维空间的分布
从上面图中,如果认为perplexity=20
效果还不错,因此下面继续跑runTSNE
时就可以设置perplexity=20
set.seed(100)
sce <- runTSNE(sce, use_dimred="PCA", perplexity=20)
reducedDimNames(sce)
## [1] "PCA" "TSNE"
除此以外,还有许多降维的方法:例如multidimensional scaling、 diffusion maps,当然不同算法各有自己的适用范围,比如 diffusion maps(plotDiffusionMap
) 会将细胞放在一个连续的轨迹上,这在推断分化过程方面是很有效的
作者建议
如何解释tSNE图?可以参考https://distill.pub/2016/misread-tsne/ 其中映射到二维坐标上的cluster之间的距离其实没什么意义,还有cluster的大小(也就是其中点的分布稀疏程度,而不是指其中包含点的多少。对于同等数量的点,分布分散一点形成的cluster就大)也是没什么具体意义。它只是一种二维空间再现高维空间的手段
perplexity
的值一般设为5-50,可以看一下上面链接中给出的测试图:当这个值不在5-50范围时,点聚成的形状就很奇怪另外画tsne图时一般要重复很多次,因为重复次数越多,画出的图形状越稳定,上图中使用了5000次重复,下图如果仅仅使用120次重复,结果会是:
tsne图中的点距离并没有意义,用两张图就能说明:
第一张:本来绿色的点和其他两种是有距离的,但是当设置的perplexity增大发现,图中它们距离是差不多相等的。Wait!那如果设成50不就可以了吗?从这个图中看好像是的,但是…
如果增加原本点的个数,依然是绿色与其他两种有原始距离,使用perplexity=50,结果依然得不出相似的结论,说明perplexity不是一个固定的值,它会根据分析点的数量而变化,得到的结果也不能反应原始数据结构
tSNE能做的,只是将原本聚在一起的,现在依旧聚在一起,并且有时会给你一些数据形状
tSNE使用很流行的一个原因就是:它很灵活,经常能帮助寻找到数据的结构(像线性方法PCA就不可以),不过想要找点的距离远近就不要看tSNE了
点击底部的“阅读原文”,获得更好的阅读体验哦😻
初学生信,很荣幸带你迈出第一步。
我们是生信星球,一个不拽术语、通俗易懂的生信知识平台。由于是2018年新号,竟然没有留言功能。需要帮助或提出意见请后台留言、联系微信或发送邮件到jieandze1314@gmail.com,每一条都会看到的哦~